home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2007 December / PCWKCD1207B.iso / Blogowanie poza sfera / Flock 0.9.1.3 stable / flock-0.9.1.3.en-US.win32.exe / flock / chrome / browser.jar / content / browser / preferences / languages.js < prev    next >
Text File  |  2006-07-18  |  10KB  |  300 lines

  1. //@line 40 "/cygdrive/K/tinderbuild/src/flock/mozilla/browser/components/preferences/languages.js"
  2.  
  3. var gLanguagesDialog = {
  4.  
  5.   _availableLanguagesList : [],
  6.   _acceptLanguages        : { },
  7.   
  8.   _selectedItemID         : null,
  9.   
  10.   init: function ()
  11.   {
  12.     if (!this._availableLanguagesList.length)
  13.       this._loadAvailableLanguages();
  14.   },
  15.   
  16.   get _activeLanguages()
  17.   {
  18.     return document.getElementById("activeLanguages");
  19.   },
  20.   
  21.   get _availableLanguages()
  22.   {
  23.     return document.getElementById("availableLanguages");
  24.   },
  25.   
  26.   _loadAvailableLanguages: function ()
  27.   {
  28.     // This is a parser for: resource://gre/res/language.properties
  29.     // The file is formatted like so:
  30.     // ab[-cd].accept=true|false
  31.     //  ab = language
  32.     //  cd = region
  33.     var bundleAccepted    = document.getElementById("bundleAccepted");
  34.     var bundleRegions     = document.getElementById("bundleRegions");
  35.     var bundleLanguages   = document.getElementById("bundleLanguages");
  36.     var bundlePreferences = document.getElementById("bundlePreferences");
  37.  
  38.     function LanguageInfo(aName, aABCD, aIsVisible)
  39.     {
  40.       this.name = aName;
  41.       this.abcd = aABCD;
  42.       this.isVisible = aIsVisible;
  43.     }
  44.  
  45.     // 1) Read the available languages out of language.properties
  46.     var strings = bundleAccepted.strings;
  47.     while (strings.hasMoreElements()) {
  48.       var currString = strings.getNext();
  49.       if (!(currString instanceof Components.interfaces.nsIPropertyElement))
  50.         break;
  51.       
  52.       var property = currString.key.split("."); // ab[-cd].accept
  53.       if (property[1] == "accept") {
  54.         var abCD = property[0];
  55.         var abCDPairs = abCD.split("-");      // ab[-cd]
  56.         var useABCDFormat = abCDPairs.length > 1;
  57.         var ab = useABCDFormat ? abCDPairs[0] : abCD;
  58.         var cd = useABCDFormat ? abCDPairs[1] : "";
  59.         if (ab) {
  60.           var language = "";
  61.           try {
  62.             language = bundleLanguages.getString(ab);
  63.           } 
  64.           catch (e) { continue; };
  65.           
  66.           var region = "";
  67.           if (useABCDFormat) {
  68.             try {
  69.               region = bundleRegions.getString(cd);
  70.             }
  71.             catch (e) { continue; }
  72.           }
  73.           
  74.           var name = "";
  75.           if (useABCDFormat)
  76.             name = bundlePreferences.getFormattedString("languageRegionCodeFormat", 
  77.                                                         [language, region, abCD]);
  78.           else
  79.             name = bundlePreferences.getFormattedString("languageCodeFormat", 
  80.                                                         [language, abCD]);
  81.           
  82.           if (name && abCD) {
  83.             var isVisible = currString.value == "true" && 
  84.                             (!(abCD in this._acceptLanguages) || !this._acceptLanguages[abCD]);
  85.             var li = new LanguageInfo(name, abCD, isVisible);
  86.             this._availableLanguagesList.push(li);
  87.           }
  88.         }
  89.       }
  90.     }
  91.     this._buildAvailableLanguageList();
  92.   },
  93.   
  94.   _buildAvailableLanguageList: function ()
  95.   {
  96.     var availableLanguagesPopup = document.getElementById("availableLanguagesPopup");
  97.     while (availableLanguagesPopup.hasChildNodes())
  98.       availableLanguagesPopup.removeChild(availableLanguagesPopup.firstChild);
  99.       
  100.     // Sort the list of languages by name
  101.     this._availableLanguagesList.sort(function (a, b) {
  102.                                         return a.name.localeCompare(b.name);
  103.                                       });
  104.                                   
  105.     // Load the UI with the data
  106.     for (var i = 0; i < this._availableLanguagesList.length; ++i) {
  107.       var abCD = this._availableLanguagesList[i].abcd;
  108.       if (this._availableLanguagesList[i].isVisible && 
  109.           (!(abCD in this._acceptLanguages) || !this._acceptLanguages[abCD])) {
  110.         var menuitem = document.createElement("menuitem");
  111.         menuitem.id = this._availableLanguagesList[i].abcd;
  112.         availableLanguagesPopup.appendChild(menuitem);
  113.         menuitem.setAttribute("label", this._availableLanguagesList[i].name);
  114.       }
  115.     }
  116.   },
  117.   
  118.   readAcceptLanguages: function ()
  119.   {
  120.     while (this._activeLanguages.hasChildNodes())
  121.       this._activeLanguages.removeChild(this._activeLanguages.firstChild);
  122.     
  123.     var selectedIndex = 0;
  124.     var preference = document.getElementById("intl.accept_languages");
  125.     if (preference.value == "") 
  126.       return undefined;
  127.     var languages = preference.value.split(/\s*,\s*/);
  128.     for (var i = 0; i < languages.length; ++i) {
  129.       var name = this._getLanguageName(languages[i]);
  130.       if (!name)
  131.         name = "[" + languages[i] + "]";
  132.       var listitem = document.createElement("listitem");
  133.       listitem.id = languages[i];
  134.       if (languages[i] == this._selectedItemID)
  135.         selectedIndex = i;
  136.       this._activeLanguages.appendChild(listitem);
  137.       listitem.setAttribute("label", name);
  138.  
  139.       // Hash this language as an "Active" language so we don't
  140.       // show it in the list that can be added. 
  141.       this._acceptLanguages[languages[i]] = true;
  142.     }
  143.  
  144.     if (this._activeLanguages.childNodes.length > 0) {
  145.       this._activeLanguages.ensureIndexIsVisible(selectedIndex);
  146.       this._activeLanguages.selectedIndex = selectedIndex;
  147.     }
  148.  
  149.     return undefined;
  150.   },
  151.   
  152.   writeAcceptLanguages: function ()
  153.   {
  154.     return undefined;
  155.   },
  156.   
  157.   onAvailableLanguageSelect: function ()
  158.   {
  159.     var addButton = document.getElementById("addButton");
  160.     addButton.disabled = false;
  161.     
  162.     this._availableLanguages.removeAttribute("accesskey");
  163.   },
  164.   
  165.   addLanguage: function ()
  166.   {
  167.     var selectedID = this._availableLanguages.selectedItem.id;
  168.     var preference = document.getElementById("intl.accept_languages");
  169.     var arrayOfPrefs = preference.value.split(/\s*,\s*/);
  170.     for (var i = 0; i < arrayOfPrefs.length; ++i ){
  171.       if (arrayOfPrefs[i] == selectedID)
  172.         return;
  173.     }
  174.       
  175.     this._selectedItemID = selectedID;
  176.     
  177.     if (preference.value == "") 
  178.       preference.value = selectedID;
  179.     else
  180.       preference.value += "," + selectedID;
  181.   
  182.     this._acceptLanguages[selectedID] = true;
  183.     this._availableLanguages.selectedItem = null;
  184.     
  185.     // Reuild the available list with the added item removed...
  186.     this._buildAvailableLanguageList(); 
  187.     
  188.     this._availableLanguages.setAttribute("label", this._availableLanguages.getAttribute("label2"));
  189.   },
  190.   
  191.   removeLanguage: function ()
  192.   {
  193.     // Build the new preference value string.
  194.     var languagesArray = [];
  195.     for (var i = 0; i < this._activeLanguages.childNodes.length; ++i) {
  196.       var item = this._activeLanguages.childNodes[i];
  197.       if (!item.selected) 
  198.         languagesArray.push(item.id);
  199.       else  
  200.         this._acceptLanguages[item.id] = false;
  201.     }
  202.     var string = languagesArray.join(",");
  203.  
  204.     // Get the item to select after the remove operation completes.     
  205.     var selection = this._activeLanguages.selectedItems;
  206.     var lastSelected = selection[selection.length-1];
  207.     var selectItem = lastSelected.nextSibling || lastSelected.previousSibling;
  208.     selectItem = selectItem ? selectItem.id : null;
  209.     
  210.     this._selectedItemID = selectItem;
  211.  
  212.     // Update the preference and force a UI rebuild
  213.     var preference = document.getElementById("intl.accept_languages");
  214.     preference.value = string;
  215.  
  216.     this._buildAvailableLanguageList(); 
  217.   },
  218.   
  219.   _getLanguageName: function (aABCD)
  220.   {
  221.     if (!this._availableLanguagesList.length)
  222.       this._loadAvailableLanguages();
  223.     for (var i = 0; i < this._availableLanguagesList.length; ++i) {
  224.       if (aABCD == this._availableLanguagesList[i].abcd) 
  225.         return this._availableLanguagesList[i].name;
  226.     }
  227.     return "";
  228.   },
  229.   
  230.   moveUp: function ()
  231.   {
  232.     var selectedItem = this._activeLanguages.selectedItems[0];
  233.     var previousItem = selectedItem.previousSibling;
  234.     
  235.     var string = "";
  236.     for (var i = 0; i < this._activeLanguages.childNodes.length; ++i) {
  237.       var item = this._activeLanguages.childNodes[i];
  238.       string += (i == 0 ? "" : ",");
  239.       if (item.id == previousItem.id) 
  240.         string += selectedItem.id;
  241.       else if (item.id == selectedItem.id)
  242.         string += previousItem.id;
  243.       else
  244.         string += item.id;
  245.     }
  246.     
  247.     this._selectedItemID = selectedItem.id;
  248.  
  249.     // Update the preference and force a UI rebuild
  250.     var preference = document.getElementById("intl.accept_languages");
  251.     preference.value = string;
  252.   },
  253.   
  254.   moveDown: function ()
  255.   {
  256.     var selectedItem = this._activeLanguages.selectedItems[0];
  257.     var nextItem = selectedItem.nextSibling;
  258.     
  259.     var string = "";
  260.     for (var i = 0; i < this._activeLanguages.childNodes.length; ++i) {
  261.       var item = this._activeLanguages.childNodes[i];
  262.       string += (i == 0 ? "" : ",");
  263.       if (item.id == nextItem.id) 
  264.         string += selectedItem.id;
  265.       else if (item.id == selectedItem.id)
  266.         string += nextItem.id;
  267.       else
  268.         string += item.id;
  269.     }
  270.     
  271.     this._selectedItemID = selectedItem.id;
  272.  
  273.     // Update the preference and force a UI rebuild
  274.     var preference = document.getElementById("intl.accept_languages");
  275.     preference.value = string;
  276.   },
  277.   
  278.   onLanguageSelect: function ()
  279.   {
  280.     var upButton = document.getElementById("up");
  281.     var downButton = document.getElementById("down");
  282.     var removeButton = document.getElementById("remove");
  283.     switch (this._activeLanguages.selectedCount) {
  284.     case 0:
  285.       upButton.disabled = downButton.disabled = removeButton.disabled = true;
  286.       break;
  287.     case 1:
  288.       upButton.disabled = this._activeLanguages.selectedIndex == 0;
  289.       downButton.disabled = this._activeLanguages.selectedIndex == this._activeLanguages.childNodes.length - 1;
  290.       removeButton.disabled = false;
  291.       break;
  292.     default:
  293.       upButton.disabled = true;
  294.       downButton.disabled = true;
  295.       removeButton.disabled = false;
  296.     }
  297.   }
  298. };
  299.  
  300.